//专门处理成绩的业务逻辑scoreModel
// 1. express 框架
const express = require('express');
const scoreModel = require('../../model/scoreModel');
// 导入jwt token工具
const JwtUtil = require('../../utils/jwt');
// 导入生成id的包
const { v4: uuidv4 } = require('uuid');
// 2.创建一个后台路由
const router = express.Router();

// 记录用户考试成绩
router.post('/add', async (req, res) => {
    let { user_name, score_val, score_exam_time, exam_options, exam_time, exam_type, topic_lib_id, exam_id, exam_name, exam_fullcredit, exam_passline } = req.body;
    let token = req.headers.token;
    console.log({score_val})
    // 判断用户登录状态
    let jwt = new JwtUtil(token);
    // 返回一个对象（包含用户身份）
    let result = jwt.verifyToken();
    // 验通过执行下一步，否则就返回登陆信息不正确
    if (result == 'err') {
        // 提醒用户重新登录
        res.send({
            code: -1,
            msg: '登录已过期,请重新登录。'
        });
    } else {
        // 用户身份
        let user_id = result.data;
        // 成绩标记 生成随机字符串
        let score_id = uuidv4();
        await scoreModel.add(user_name, score_id, score_val, score_exam_time, exam_options, exam_time, exam_type, topic_lib_id, user_id, exam_id, exam_name, exam_fullcredit, exam_passline).then(content => {
            res.send(content)
        }).catch(
            err => {
                res.send(err);
            }
        )
    }

})

// 删除成绩(用户自己删除)
router.post('/remove', async (req, res) => {
    let { score_id } = req.body;
    let token = req.headers.token;
    // 判断用户登录状态
    let jwt = new JwtUtil(token);
    // 返回一个对象（包含用户身份）
    let result = jwt.verifyToken();
    // 验通过执行下一步，否则就返回登陆信息不正确
    if (result == 'err') {
        // 提醒用户重新登录
        res.send({
            code: -1,
            msg: '登录已过期,请重新登录。'
        });
    } else {
        let user_id = result.data;
        await scoreModel.remove(score_id, user_id).then(content => {
            res.send(content)
        }).catch(
            err => {
                res.send(err);
            }
        )
    }
})

// 删除成绩（管理员删除）
router.post('/delete', async (req, res) => {
    let { score_id } = req.body;
    let token = req.headers.token;
    // 判断用户登录状态
    let jwt = new JwtUtil(token);
    // 返回一个对象（包含用户身份）
    let result = jwt.verifyToken();
    // 验通过执行下一步，否则就返回登陆信息不正确
    if (result == 'err') {
        // 提醒用户重新登录
        res.send({
            code: -1,
            msg: '登录已过期,请重新登录。'
        });
    } else {
        await scoreModel.delete(score_id).then(content => {
            res.send(content)
        }).catch(
            err => {
                res.send(err);
            }
        )
    }
})

// 成绩列表
router.get('/list', async (req, res) => {
    let { page_num, page_size } = req.query;

    let token = req.headers.token;
    // 判断用户登录状态
    let jwt = new JwtUtil(token);
    // 返回一个对象（包含用户身份）
    let result = jwt.verifyToken();
    // 验通过执行下一步，否则就返回登陆信息不正确
    if (result == 'err') {
        // 提醒用户重新登录
        res.send({
            code: -1,
            msg: '登录已过期,请重新登录。'
        });
    }
    else {
        let user_id = result.data;
        await scoreModel.list(page_num, page_size,user_id).then(content => {
            res.send(content)
        }).catch(
            err => {
                res.send(err);
            }
        )
    }

})


// 成绩列表（获取全部考试记录）
router.get('/list2', async (req, res) => {
    let { page_num, page_size } = req.query;
    await scoreModel.list(page_num, page_size).then(content => {
        res.send(content)
    }).catch(
        err => {
            res.send(err);
        }
    )
})
// 成绩详情
router.get('/detail', async (req, res) => {
    let { score_id,topic_lib_id } = req.query;
    let token = req.headers.token;
    // 判断用户登录状态
    let jwt = new JwtUtil(token);
    // 返回一个对象（包含用户身份）
    let result = jwt.verifyToken();
    // 验通过执行下一步，否则就返回登陆信息不正确
    if (result == 'err') {
        // 提醒用户重新登录
        res.send({
            code: -1,
            msg: '登录已过期,请重新登录。'
        });
    } else {
        await scoreModel.detail(score_id).then(content => {
            res.send(content)
        }).catch(
            err => {
                res.send(err);
            }
        )
    }
})

// 搜索成绩
router.get('/search', async (req, res) => {
    let { keyword } = req.query;
    await scoreModel.search(keyword).then(content => {
        res.send(content)
    }).catch(
        err => {
            res.send(err);
        }
    )
})

// 统计考试记录
router.get('/total', async (req, res) => {
    await scoreModel.total().then(content => {
        res.send(content)
    }).catch(
        err => {
            res.send(err);
        }
    )
})

//  是否已经参与该考试
router.post('/partake', async (req, res) => {
    let { topic_lib_id } = req.body;
    let token = req.headers.token;
    // 判断用户登录状态
    let jwt = new JwtUtil(token);
    // 返回一个对象（包含用户身份）
    let result = jwt.verifyToken();
    // 验通过执行下一步，否则就返回登陆信息不正确
    if (result == 'err') {
        // 提醒用户重新登录
        res.send({
            code: -1,
            msg: '登录已过期,请重新登录。'
        });
    } else {
        let user_id = result.data;
        await scoreModel.partake(topic_lib_id, user_id).then(content => {
            res.send(content)
        }).catch(
            err => {
                res.send(err);
            }
        )
    }
})
// 暴露成绩路由
module.exports = router;